package com.gitee.feizns.quickstart.spring;

import org.springframework.core.LocalVariableTableParameterNameDiscoverer;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 在Spring集成的用于通过字节码的方式获取方法的参数名称
 * @link <a href="https://blog.csdn.net/u012881904/article/details/77199252">在Spring集成的用于通过字节码的方式获取方法的参数名称</a>
 * @author feizns
 * @since 2019/7/21
 */
public abstract class ParamsUtils {

    /**
     * 解析器
     * @see LocalVariableTableParameterNameDiscoverer
     */
    private static final LocalVariableTableParameterNameDiscoverer DISCOVERER = new LocalVariableTableParameterNameDiscoverer();

    /**
     * 获取方法的所有参数名（字节码）
     * @param method {@link Method}
     * @return 方法参数名列表
     */
    public static String[] getNames(Method method) {
        return DISCOVERER.getParameterNames(method);
    }

    /**
     * 获取构造器上的所有方法参数名
     * @param constructor {@link Constructor}
     * @return 方法参数名列表
     */
    public static String[] getNames(Constructor<?> constructor) {
        return DISCOVERER.getParameterNames(constructor);
    }

}
